//给你一个正整数 n ，生成一个包含 1 到 n² 所有元素，且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix 。 
//
// 
//
// 示例 1： 
// 
// 
//输入：n = 3
//输出：[[1,2,3],[8,9,4],[7,6,5]]
// 
//
// 示例 2： 
//
// 
//输入：n = 1
//输出：[[1]]
// 
//
// 
//
// 提示： 
//
// 
// 1 <= n <= 20 
// 
//
// Related Topics 数组 矩阵 模拟 👍 1352 👎 0

package leetcode.editor.cn;
//java:螺旋矩阵 II
public class Q0059SpiralMatrixIi {
    public static void main(String[] args){
        Solution solution = new Q0059SpiralMatrixIi().new Solution();
        solution.generateMatrix(3);
    }
    //leetcode submit region begin(Prohibit modification and deletion)
class Solution {
    public int[][] generateMatrix(int n) {
        int[][] res = new int[n][n];
        int i = 0, j = 0;
        // 填充的值
        int value = 1;
        // 记录是第几层， 需要去头去尾巴
        for (int count = 1; n - count * 2 >= 0; count++) {
            // 重新设置每次的开始位置
            i = count - 1;
            j = count - 1;
            // 左->右
            while (j < n - count) {
                res[i][j] = value++;
                j++;
            }
            // 上->下
            while (i < n - count) {
                res[i][j] = value++;
                i++;
            }
            // 右->左
            while (j >= count) {
                res[i][j] = value++;
                j--;
            }
            // 下->上
            while (i >= count) {
                res[i][j] = value++;
                i--;
            }
        }

        if (n % 2 != 0) {
            res[n / 2][n / 2] = value;
        }
        return res;
    }
}
//leetcode submit region end(Prohibit modification and deletion)

}